package com.spring.springboot.sys.util;

import com.spring.springboot.sys.core.model.UserInfo;
import org.springframework.stereotype.Component;

/**
 * 用户信息工具
 *
 * @author 宋义州
 */
@Component
public class UserInfoUtils {
    /**
     * 用户信息
     */
    private static final ThreadLocal<UserInfo> USER_INFO_THREAD_LOCAL = new ThreadLocal<>();

    public static String getAccountId() {
        return USER_INFO_THREAD_LOCAL.get().getAccount();
    }

    public static void remove() {
        USER_INFO_THREAD_LOCAL.remove();
    }

    public static UserInfo getUserInfo() {
        return USER_INFO_THREAD_LOCAL.get();
    }

    public static void setUserInfo(UserInfo userInfo) {
        USER_INFO_THREAD_LOCAL.set(userInfo);
    }

    /**
     * 判断是否有分配权限
     *
     * @param
     * @return boolean
     * @author 宋义州
     * @date 2021/8/21 下午4:07
     */
    //public static boolean existsAssignAuth() {
    //    List<UserRole> userRoleList = getUserInfo().getUserRoleList();
    //    if (userRoleList != null) {
    //        for (UserRole userRole : userRoleList) {
    //            if (InternalRoleEnum.ALLOCATE.getCode().equals(userRole.getRoleCode())) {
    //                return true;
    //            }
    //        }
    //    }
    //    return false;
    //}

    /**
     * 判断是否有某个权限
     *
     * @param roleCode 角色编码
     * @return boolean
     * @author CHB
     */
    //public static boolean existsAuthority(String roleCode) {
    //    List<UserRole> userRoleList = getUserInfo().getUserRoleList();
    //    if (userRoleList != null) {
    //        for (UserRole userRole : userRoleList) {
    //            if (roleCode.equals(userRole.getRoleCode())) {
    //                return true;
    //            }
    //        }
    //    }
    //    return false;
    //}

    /**
     * 判断是否包含某个角色，包含则返回该角色的code
     * 若用户角色包含 AR001 001 002，参数为 001 002， 返回为[001,002]
     * 若用户角色包含 AR001 001 002，参数为 AR002， 返回为[]
     *
     * @param otherRoleCode 可变参数，需要判断的code值
     * @return List<String> 所包含的code值
     */
    //public static List<String> existsAuthorityAndReturn(String... otherRoleCode) {
    //    List<UserRole> userRoleList = getUserInfo().getUserRoleList();
    //    if (userRoleList == null) {
    //        return new ArrayList<>();
    //    }
    //    List<String> otherRoles = Arrays.asList(otherRoleCode);
    //    return userRoleList.stream()
    //            .map(UserRole::getRoleCode)
    //            .filter(otherRoles::contains)
    //            .collect(Collectors.toList());
    //}
}
